#include "tcpclient.h"

using namespace std;

TCPclient::TCPclient()
{

}

/**
  * Creación del socket
  * @param argv[] Aquí se pasa por parametro la dirección IP del servidor y el número de puerto.
  *
  * Creamos el socket y vamos comprobando que no hay errores
  * durante el proceso.
*/

void TCPclient::socket (char *argv[])
{
    sockfd = ::socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr,
          (char *)&serv_addr.sin_addr.s_addr,
          server->h_length);
    serv_addr.sin_port = htons(atoi(argv[2]));
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
        error("ERROR connecting");

}

/**
  * Comprobamos la conexión.
  * @param argc Contiene el número de argumentos del programa.
  *
  * Si el número de argumentos es menos del deseado entonces
  * se muestra un error por pantalla y se sale del programa
*/

void TCPclient::checkConnection(int argc)

{
    if (argc < 3)
    {
        cout<<"ERROR, falta la ip del servidor o el puerto"<<endl;
        exit(0);
    }
}

/**
  * Función Enviar
  * @param buffer Mensaje a enviar
*/

void TCPclient::enviar (string buffer)
{

    bufferString2Char(buffer);
    n = write(sockfd,cbuffer,strlen(cbuffer));
    if (n < 0) error("ERROR writing to socket");

}

/**
  * Función Recibir
*/

void TCPclient::recibir ()
{
    bzero(ccbuffer,1024);
    n = read(sockfd,ccbuffer,255);
    if (n < 0)
        error("ERROR reading from socket");
    bufferChar2String(ccbuffer);
}
